from pylab import *
import math

class DesenhoTriangulo:
	def __init__(self,l,ang1,ang2,ang3):
		self.L = l
		self.ip = 0.4 #intervalo ponto retas
		self.tamEixos = 250
		self.ang1 = ang1
		self.ang2 = ang2
		self.ang3 = ang3
		
	def rad2gr(self,r):
		return (180*r)/math.pi

	def gr2rad(self,g):
		return (g*math.pi)/180
	def supr(self,r):
  		return math.pi - r

	def supg(self,g):
	  return 180 - g

	def rn1(self,x):
		return (math.sqrt(3)/3) * x
	def rn2(self,x):
		return (-(math.sqrt(3)/3) * x) + (math.sqrt(3)/3)*self.L

	def r11(self,x,m11,teta):
		return m11*x - ( self.L/4*( 3*m11 - math.sqrt(3) ) )

	def r21(self,x,m21,teta):
		return m21*x + ( self.L/4*( math.sqrt(3) - m21 ) )

	def r31(self,x,m31,teta):
		return m31*(x-self.L/2)

	def desenhaRn1(self):
  		d = 3*self.L/4
		x = arange(d,5+d,0.01)
		#y = feval(x,rn1)
		plot(x,self.rn1(x),'b')

	def desenhaRn2(self):
		d = self.L/4
		x = arange(d,-5+d,-0.01)
		plot(x,self.rn2(x),'b')

	def desenhaRn3(self):
		y = arange(0,-5,-0.01)
		x = []
		for i in range(len(y)):
			x.append(self.L/2)
		plot(x,y,'b')

	def desenhaR11(self,teta,c):
		x = arange(-2*self.tamEixos,4*self.tamEixos,self.ip)
		m11 = math.tan(teta+math.atan(math.sqrt(3)/3))
		y = []
		for xi in x:
			y.append(self.r11(xi,m11,teta));
		plot(x,y,c)

	def desenhaR12(self,teta,c):
		teta = self.supr(teta)
		self.desenhaR11(teta,c)

	def desenhaR21(self,teta,c):
		x = arange(-4*self.tamEixos,4*self.tamEixos,self.ip)
		m21 = math.tan(teta+math.atan(-(math.sqrt(3)/3)))
		y = []
		for xi in x:
			y.append(self.r21(xi,m21,teta))
		plot(x,y,c)

	def desenhaR22(self,teta,c):
		teta = self.supr(teta)
		self.desenhaR21(teta,c)

	def desenhaR31(self,teta,c):
		x = arange(-4*self.tamEixos,4*self.tamEixos,self.ip)
		m31 = math.tan((math.pi/2) + teta); 
		y = []
		for xi in x:
			y.append(self.r31(xi,m31,teta))
		plot(x,y,c)

	def desenhaR32(self,teta,c):
		teta = self.supr(teta)
		self.desenhaR31(teta,c)

	def desenhaEixos(self,t):
		x1 = arange(-t,t,0.1)
		y1 = []
		for xi in x1:
			y1.append(0)	
		#y1 = zeros(1,length(x1))
		plot(x1,y1,'b')
		x2 = y1
		y2 = x1
		plot(x2,y2,'b')

	def lado1(self,x):
		return -math.sqrt(3)*x + math.sqrt(3)*self.L

	def lado2(self,x):
		return math.sqrt(3)*x
		
	def desenhaTriangulo(self):
		x1 = arange(self.L/2,self.L,0.1)
		#y1 = feval(x1,lado1)
		x2 = arange(0,self.L/2,0.1)
		#y2 = feval(x2,lado2)
		plot(x1,self.lado1(x1),'b')
		plot(x2,self.lado2(x2),'b')

	def desenhar(self):
		self.desenhaEixos(self.tamEixos)
		self.desenhaTriangulo()
		self.desenhaRn1()
		self.desenhaRn2()
		self.desenhaRn3()
		self.desenhaR11(self.gr2rad(self.ang1),'r')
		self.desenhaR12(self.gr2rad(self.ang1),'r')
		self.desenhaR21(self.gr2rad(self.ang2),'g')
		self.desenhaR22(self.gr2rad(self.ang2),'g')
		self.desenhaR31(self.gr2rad(self.ang3),'b')
		self.desenhaR32(self.gr2rad(self.ang3),'b')
		axis([-self.tamEixos*2,self.tamEixos*2,-self.tamEixos*2,self.tamEixos*2])
		grid()
		show()
		
##----------------------------------------------
if __name__ == '__main__':
	ang1 = 20
	ang2 = 20
	ang3 = 20
	dm = 30
	desenho = DesenhoTriangulo(30,ang1,ang2,ang3)
	desenho.desenhar()
